package com.shujia.mr.reduceJoin;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;


/**
 * 需求：
 *      将学生基本信息和学生总分进行关联，再将关联的结果写出到一个文件中
 *
 * Mapper端：
 *      1.需要读取两个文件，分别为学生基本信息和学生总分
 *      2.需要对数据进行区分，并做数据切分工作
 *      3.需要取出其中的Key,Key为学生的ID
 *      4.需要再取出其中的Value，并且对Value进行标记区分
 *
 * Reduce端：
 *      5.接收Map端输出的相同Key的数据
 *      6.根据两个Value的数据中的标记信息，区分数据类型
 *      7.区分后，对数据进行包装，再对结果写出文件
 *
 */
public class MyReduceJoinMapper extends Mapper<LongWritable, Text,Text,Text> {
    @Override
    protected void map(LongWritable key, Text value, Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException {
        // 读取到一行数据，即可能是学生基本信息也可能是学生的总分
        String oneLine = value.toString();

        // 如果包含逗号，表示为学生的基本信息
        if (oneLine.contains(",")) {
            String[] columns = oneLine.split(",");
            context.write(new Text(columns[0]),new Text(columns[1]+","+columns[2]+","+columns[3]+","+columns[4]));
        }else {
            String[] columns = oneLine.split("\t");
            context.write(new Text(columns[0]),new Text(columns[1]));
        }
    }
}
